package beans;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

import javax.persistence.Id;
import javax.persistence.Transient;


public class Sucursal implements Serializable
{
    /**
	 * 
	 */
	private static final long serialVersionUID = -1155612899706353844L;
	
	@Id
	public int nroSucursal;
    
	private String nombre;
	
	@Transient
    private Barra barra;
	public int getNroSucursal() {
		return nroSucursal;
	}

	public void setNroSucursal(int nroSucursal) {
		this.nroSucursal = nroSucursal;
	}

	@Transient
    private Cafeteria cafeteria;
	@Transient
    private Cocina cocina;
	@Transient
    private Caja caja;
	@Transient
    private DepositoSucursal depositoSucursal;
	@Transient
	private Carta carta;
	@Transient
    private List<Comanda> comandas;
	@Transient
    private List<Producto> productos;
	@Transient
    private List<Factura> facturas;
	@Transient
    private List<Mesa> mesas;
	@Transient
    private List<Mozo> mozos;
	@Transient
	private List<PlanProduccion> planesProduccion;
	
    public List<PlanProduccion> getPlanesProduccion() {
		return planesProduccion;
	}

	public void setPlanesProduccion(List<PlanProduccion> planesProduccion) {
		this.planesProduccion = planesProduccion;
	}

	public Sucursal() 
    {
        barra = new Barra();
        cafeteria = new Cafeteria();
        cocina = new Cocina();
        caja = new Caja();
        depositoSucursal = new DepositoSucursal();
        carta = new Carta();
        comandas =  new ArrayList<Comanda>();
        productos =  new ArrayList<Producto>();
        facturas =  new ArrayList<Factura>();
        mesas =  new ArrayList<Mesa>();
        mozos =  new ArrayList<Mozo>();
	}

	public String getNombre() {
		return nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}





	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((barra == null) ? 0 : barra.hashCode());
		result = prime * result
				+ ((cafeteria == null) ? 0 : cafeteria.hashCode());
		result = prime * result + ((caja == null) ? 0 : caja.hashCode());
		result = prime * result + ((carta == null) ? 0 : carta.hashCode());
		result = prime * result + ((cocina == null) ? 0 : cocina.hashCode());
		result = prime * result
				+ ((comandas == null) ? 0 : comandas.hashCode());
		result = prime
				* result
				+ ((depositoSucursal == null) ? 0 : depositoSucursal.hashCode());
		result = prime * result
				+ ((facturas == null) ? 0 : facturas.hashCode());
		result = prime * result + ((mesas == null) ? 0 : mesas.hashCode());
		result = prime * result + ((mozos == null) ? 0 : mozos.hashCode());
		result = prime * result + ((nombre == null) ? 0 : nombre.hashCode());
		result = prime * result + nroSucursal;
		result = prime * result
				+ ((productos == null) ? 0 : productos.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Sucursal other = (Sucursal) obj;
		if (barra == null) {
			if (other.barra != null)
				return false;
		} else if (!barra.equals(other.barra))
			return false;
		if (cafeteria == null) {
			if (other.cafeteria != null)
				return false;
		} else if (!cafeteria.equals(other.cafeteria))
			return false;
		if (caja == null) {
			if (other.caja != null)
				return false;
		} else if (!caja.equals(other.caja))
			return false;
		if (carta == null) {
			if (other.carta != null)
				return false;
		} else if (!carta.equals(other.carta))
			return false;
		if (cocina == null) {
			if (other.cocina != null)
				return false;
		} else if (!cocina.equals(other.cocina))
			return false;
		if (comandas == null) {
			if (other.comandas != null)
				return false;
		} else if (!comandas.equals(other.comandas))
			return false;
		if (depositoSucursal == null) {
			if (other.depositoSucursal != null)
				return false;
		} else if (!depositoSucursal.equals(other.depositoSucursal))
			return false;
		if (facturas == null) {
			if (other.facturas != null)
				return false;
		} else if (!facturas.equals(other.facturas))
			return false;
		if (mesas == null) {
			if (other.mesas != null)
				return false;
		} else if (!mesas.equals(other.mesas))
			return false;
		if (mozos == null) {
			if (other.mozos != null)
				return false;
		} else if (!mozos.equals(other.mozos))
			return false;
		if (nombre == null) {
			if (other.nombre != null)
				return false;
		} else if (!nombre.equals(other.nombre))
			return false;
		if (nroSucursal != other.nroSucursal)
			return false;
		if (productos == null) {
			if (other.productos != null)
				return false;
		} else if (!productos.equals(other.productos))
			return false;
		return true;
	}

	public Barra getBarra() {
		return barra;
	}

	public void setBarra(Barra barra) {
		this.barra = barra;
	}

	public Cafeteria getCafeteria() {
		return cafeteria;
	}

	public void setCafeteria(Cafeteria cafeteria) {
		this.cafeteria = cafeteria;
	}

	public Cocina getCocina() {
		return cocina;
	}

	public void setCocina(Cocina cocina) {
		this.cocina = cocina;
	}

	public Caja getCaja() {
		return caja;
	}

	public void setCaja(Caja caja) {
		this.caja = caja;
	}

	public DepositoSucursal getDepositoSucursal() {
		return depositoSucursal;
	}

	public void setDepositoSucursal(DepositoSucursal depositoSucursal) {
		this.depositoSucursal = depositoSucursal;
	}

	public Carta getCarta() {
		return carta;
	}

	public void setCarta(Carta carta) {
		this.carta = carta;
	}

	public List<Comanda> getComandas() {
		return comandas;
	}

	public void setComandas(List<Comanda> comandas) {
		this.comandas = comandas;
	}

	public List<Producto> getProductos() {
		return productos;
	}

	public void setProductos(List<Producto> productos) {
		this.productos = productos;
	}

	public List<Factura> getFacturas() {
		return facturas;
	}

	public void setFacturas(List<Factura> facturas) {
		this.facturas = facturas;
	}

	public List<Mesa> getMesas() {
		return mesas;
	}

	public void setMesas(List<Mesa> mesas) {
		this.mesas = mesas;
	}

	public List<Mozo> getMozos() {
		return mozos;
	}

	public void setMozos(List<Mozo> mozos) {
		this.mozos = mozos;
	}

    
    public void abrirMesa( int cantPersonas,  int nroMesa,  int nroMozo,  Calendar fechaHora)
    {
    
    }
    
    public int  abrirComanda( List<String> platos,  int nroMozo,  int cantPersonas,  int nroMesa)
    {
		return nroMesa;
    	
    }
    
    public void crearMovimiento( int idProducto,  int  cantidad,  Calendar fechaMovimiento,  int idDeposito)
    {
    
    }
    
    public void asignarSemielaborados( List<String> productos,  float hsAsignadasSemielaborados)
    {
    
    }
    
    public void agregarPlatosAComanda( int nroComanda,  List<String> platos)
    {
    
    }
    
    public void cerrarComanda( int nroComanda)
    {
    
    }
    
    private Comanda obtenerComandaXNro( int nroComanda)
    {
		return null;
    
    }
    
    private List<Plato> obtenerPlatos( List<String> platos)
    {
		return null;
    
    }
    
    public boolean verificarExistenciaProducto( int idProducto )
    {
    	boolean existe = false;
    	Producto p = null;
    	for (Producto prod : productos ) 
    	{
    		if ( idProducto == p.getIdProducto() )
    		{
    			p = prod;
    		}
		}
    	if ( p == null )
    	{
    		
    	}
		return existe;
    }
    
    public void calcularComisiones( List<Mozo> mozosSucursal)
    {
    
    }
    
    public void ejecucionPlanProduccion()
    {
    
    }
    
    public void generarInformeReposicionInsumos()
    {
    
    }
    
    public void asignarMesaASector( int nroMesa,  int nroSector)
    {
    
    }
}
